import Vue from 'vue' // 导入Vue库
import App from './App.vue' // 导入根组件App
import { // 导入element-ui库
    Button, Radio, Container, Main, Header, Aside, Menu, Submenu, MenuItemGroup, MenuItem, DropdownMenu,
    DropdownItem, Dropdown, Row, Col, Card, Table, TableColumn, Breadcrumb, BreadcrumbItem, Tag, FormItem, Form,
    Input, Select, Switch, DatePicker, Option, Dialog, Pagination, MessageBox, Message
} from 'element-ui';
import VueRouter from 'vue-router' // 导入vue-router库
import router from './router' // 导入路由配置
import './assets/less/index.less' // 导入样式文件
import store from '../src/store' // 导入vuex仓库
import axios from 'axios' // 导入axios库
import '../api/mock.js' // 导入mock数据

Vue.config.productionTip = false // 设置不显示生产模式的消息
Vue.use(VueRouter) // 使用vue-router插件
Vue.use(Button) // 使用element-ui组件
Vue.use(Radio)
Vue.use(Container)
Vue.use(Main)
Vue.use(Header)
Vue.use(Aside)
Vue.use(Menu)
Vue.use(Submenu)
Vue.use(MenuItem)
Vue.use(MenuItemGroup)
Vue.use(DropdownMenu)
Vue.use(DropdownItem)
Vue.use(Dropdown)
Vue.use(Row)
Vue.use(Card)
Vue.use(Col)
Vue.use(Table)
Vue.use(TableColumn)
Vue.use(Breadcrumb)
Vue.use(BreadcrumbItem)
Vue.use(Tag)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Input)
Vue.use(Select)
Vue.use(Switch)
Vue.use(DatePicker)
Vue.use(Option)
Vue.use(Dialog)
Vue.use(Pagination)
Vue.prototype.$confirm = MessageBox.confirm // 全局注册MessageBox的confirm方法
Vue.prototype.$message = Message // 全局注册Message组件
Vue.prototype.$axios = axios // 将axios挂载到Vue原型上
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) { // 重写VueRouter的push方法
   return originalPush.call(this, location).catch(err => err)
}
router.beforeEach((to, from, next) => { // 路由全局前置守卫
    store.commit('getToken') // 获取token
    const token = store.state.token
    if (!token && to.name !== 'login') {
        next({ name: 'login' }) // 没有token且不是login页面，跳转到login页面
    } else if (token && to.name === 'login') {
        next({ name: 'home' }) // 有token且是login页面，跳转到home页面
    } else {
        next() // 其他情况正常跳转
    }
})
new Vue({ // 创建Vue实例
    render: h => h(App), // 渲染App组件
    created() {
      store.commit('addMenu', router)  // 调用addMenu方法添加菜单
    },
    router, // 注入router对象
    store // 注入store对象
}).$mount('#app') // 挂载到id为app的元素上